/* 购物车 */

/* 全选反选功能 */
/* 全选 */
$(".qx").click(function () {
  // 1. 获取全选框的选中状态
  let status = $(this).prop("checked");
  // 2. 根据状态设置所有复选框是否全选
  $(".qx, .dx").prop("checked", status);
});

/* 反选 */
$(".dx").click(function () {
  // 1. 判断单选框选中前的长度和选中后的长度，如果相等则全选
  $(".dx").length === $(".dx:checked").length
    ? $(".qx").prop("checked", true)
    : $(".qx").prop("checked", false);
});

/* 增加减少功能 */
/* 增加 */
$(".add").click(function () {
  // 1. 获取当前件数
  let num = $(this).siblings(".txt").val();
  // 2. 每点击一次自增1
  num++;
  // 3. 渲染数据
  // 4. 修改细节样式
  $(this).siblings(".txt").val(num).siblings(".reduce").css({
    color: "#000",
    cursor: "pointer",
  });

  // 5. 调用单件商品小计功能
  sTPrice($(this), num);
});

/* 减少 */
$(".reduce").click(function () {
  // 1. 获取当前件数
  let num = $(this).siblings(".txt").val();
  // 2. 判断：件数必须大于0
  if (num > 1) {
    // 2. 每点击一次自减1
    num--;
    // 3. 渲染数据
    $(this).siblings(".txt").val(num);

    // 4. 调用单件商品小计功能
    sTPrice($(this), num);
  } else {
    // 5. 修改细节样式
    $(this).css({
      color: "#979797",
      cursor: "not-allowed",
    });
    // 6. 当件数少于1件时结束点击
    return;
  }
});

/* 单件商品小计功能 */
function sTPrice($this, num) {
  // 1. 获取当前单价
  let sPrice = $this.closest("td").siblings(".sPrice").text();
  // 2. 当前件数num在增加和减少事件上已经获得
  // 3. 得到单件商品总价（保留两位小数）
  let sTPrice = (sPrice * num).toFixed(2);
  // 4. 渲染数据
  $this.closest("td").siblings(".sTPrice").text(sTPrice);
}

/* 全部商品总量和全部商品总价功能 */
// 1. 给事件源全选单选注册点击事件
$(".qx, .dx").click(function () {
  // 2. 调用获得全部商品总量和全部商品总价函数
  getTotle();

  // 3. 给事件源选中的单选下的add和reduce注册点击事件
  $(".dx:checked")
    .closest("tr")
    .find(".add")
    .click(function () {
      getTotle();
    });

  $(".dx:checked")
    .closest("tr")
    .find(".reduce")
    .click(function () {
      getTotle();
    });
});

/* 获得全部商品总量和全部商品总价 */
function getTotle() {
  // 1. 定义变量保存总量
  let allNum = 0;
  // 2. 定义变量保存总价
  let totlePrice = 0;
  // 3. 循环获得每一个选中的单件商品的总量和总价
  $(".dx:checked").each(function () {
    // 4. 单件商品总量
    let num = $(this).closest("tr").find(".txt").val();
    // 5. 单件商品总价
    let sTPrice = $(this).closest("tr").find(".sTPrice").text();
    // 6. 全部商品总量
    allNum += parseInt(num);
    // 7. 全部商品总价
    totlePrice += parseFloat(sTPrice);
  });
  // 8. 数据处理
  totlePrice = totlePrice.toFixed(2);
  // 9. 渲染数据
  $(".allNum").text(allNum);
  $(".totlePrice").text(totlePrice);
}
